home *** CD-ROM | disk | FTP | other *** search
- program hpbdeh
- c
- c See "hpbker.bwr" for details.
- c
- c Adapted from the FORTRAN-77 program "k11hex.ftn" originally
- c written by Brian Nelson 02-Mar-84 13:50:23.
- c
- c This abbreviated version of the original program can be used
- c ONLY for DECODE of "simple" (no checksum bytes) HEX-coded files
- c that are formatted with 64 characters per line, and which have a
- c decoded length that is exactly equal to an integral number of
- c RT-11 blocks. The 'checksum' verification routine in Brian's
- c program has been omitted. The size of the task image is about
- c 18 kB, and it should run on a PDP-11 under any of the RT-11
- c monitors (SJ, FB, or XM), or under TSX+. However, it has been
- c tested in this form ONLY under TSX+. Conversion times depend on
- c the system and its loading: hpbker.hex, read from a hard disk,
- c took about 2.5 min on a lightly-loaded pdp-11/73; the same file
- c took about 8.5 min to convert when read from an RX-50 floppy on
- c a fairly busy PDP-11/23+. Conversion times for other HPB*. HEX
- c files are proportionately shorter.
- c
- c Roger Wallace 24-Apr-89
- c
- c
- c To compile and link: FORTRAN/REC:512 HPBDEH.F77
- c
- c LINK HPBDEH
- c
- c
- c
- byte infil(40),outfil(40)
- c
- write (5,30040)
- write (5,30030)
- write (5,30035)
- write (5,30000)
- read (5,30010) infil
- write (5,30020)
- read (5,30010) outfil
- infil(40) = 0
- outfil(40) = 0
- open (unit=1,type='OLD',name=infil,readonly,
- 1 carriagecontrol='LIST')
- open (unit=2,type='NEW',name=outfil,access='DIRECT',
- 1 recordsize=512/4,form='UNFORMATTED')
- call cretsk
- close (unit=1)
- close (unit=2)
- call exit
- c
- 30000 format (1x,'Input HEX file ? '$)
- 30010 format (64a1)
- 30020 format (1x,'Output DEH file ? '$)
- 30030 format (1x,'Program DECODES simple 64 chars/line HEX files. ')
- 30035 format (1x,'No checksum routine included. '//)
- 30040 format (1x,' '//)
- c
- end
- c
- c
- c
- c
- c
- c
- subroutine cretsk
- c
- implicit integer (a-z)
- byte buffer(512)
- byte lbuff(64)
- byte cbuff(6)
- byte chr
- integer chmap(256)
- data chmap /256*0/
- c
- c WARNING: Any "illegal" HEX character, not 0-9 or A-F, will simply
- c be set to zero. This program will run, but he resulting decode
- c will be corrupted and probably not usable. Make sure you have
- c "clean" HEX sources!
- c
- chmap(48) = 0
- chmap(49) = 1
- chmap(50) = 2
- chmap(51) = 3
- chmap(52) = 4
- chmap(53) = 5
- chmap(54) = 6
- chmap(55) = 7
- chmap(56) = 8
- chmap(57) = 9
- chmap(65) = 10
- chmap(66) = 11
- chmap(67) = 12
- chmap(68) = 13
- chmap(69) = 14
- chmap(70) = 15
- c
- type *,' '
- type *,' '
- write (5,30040)
- c
- rnum = 1
- blkidx = 1
- 10 continue
- off = 1
- do 90 j = 1 , 16
- read(1,30010,end=100,err=99) lbuff
- i = 1
- do 20 k = off,off+31
- buffer(k) = chr( chmap(lbuff(i))*16 + chmap(lbuff(i+1)) )
- i = i + 2
- 20 continue
- off = off + 32
- 90 continue
- write(2'rnum) buffer
- write (5,30060)
- if (blkidx .eq. 78) then
- write (5,30070)
- blkidx = 0
- endif
- rnum = rnum + 1
- blkidx = blkidx + 1
- go to 10
- c
- 99 continue
- write (5,30070)
- type *,' Error reading HEX file. Decode aborted.'
- write (5,30070)
- return
- c
- 100 continue
- write (5,30070)
- type *,' Decoding completed. '
- type *,' '
- wrnum = rnum - 1
- write (5,30050) wrnum
- c
- c Yes, it's rnum - 1. The rnum counter is incremented AFTER the
- c write, but before the check for 'end-of-file'.
- c
- 30010 format (64a1)
- 30040 format (1x,'Now starting to decode the HEX file ....'//)
- 30050 format (1x,' Number of RT-11 blocks written: 'I6///)
- 30060 format (1h+,'*'$)
- 30070 format (1x,' '/)
- c
- return
- end
- c
- c
- c
- c
- c
- c
- byte function chr(i)
- c
- integer i
- byte b(2)
- integer ch
- equivalence (b(1),ch)
- ch = i
- chr = b(1)
- return
- end
-